package com.itgt.train;

import java.util.Scanner;

public abstract class Chronology {

	// private 表示私有的
	private static final char[] HEAVENLY_STEMS; // 天干
	// static 表示与类相关的、属于类的
	private static final char[] EARTHLY_BRANCHES; // 地支
	// final 表示最终的、不可更改的
	private static final char[] CHINESE_ZODIAC; // 生肖

	static {
		HEAVENLY_STEMS = new char[] { '甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸' }; // 10

		EARTHLY_BRANCHES = new char[] { '子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥' };

		CHINESE_ZODIAC = new char[] { '鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊', '猴', '鸡', '狗', '猪' };
	}

	public static void show() {
		/*
		 * 定义一个 show 方法，用于输出一甲子中六十年每年的名称: 要求每行输出12个，总共输出 5 行
		 */
		int a;
		int b;
		for (int i = 0; i < 60; i++) {
			a = i % HEAVENLY_STEMS.length;
			b = i % EARTHLY_BRANCHES.length;
			System.out.print(HEAVENLY_STEMS[a]);
			System.out.print(EARTHLY_BRANCHES[b] + "\t");
			if (b == 11) {
				System.out.println();
			}
		}
	}

	/*
	 * 定义一个参照年份，比如 1984 年 ( 甲子年 ，生肖为 鼠 )
	 */
	private static final int CONTRAST = 1984; // 参照年份

	/*
	 * 以参照年份为基础，定义 seek 方法，用以获取任意给定年份对应的名称
	 */
	public static String seek(int year) {
		int num = year - CONTRAST;
		int a = 0;
		int b = 0;
		int c = 0;
		if (num > 0) {
			a = num % 10;
			b = num % 12;
			c = num % 12;
			// return HEAVENLY_STEMS[a] + "" + EARTHLY_BRANCHES[b] + " 年，生肖 " +
			// EARTHLY_BRANCHES[c];
		} else if (num < 0) {
			int e = (num / 60 + 1) * 60 + 1;
			a = e % 10;
			b = e % 12;
			c = e % 12;
			// return HEAVENLY_STEMS[a] + "" + EARTHLY_BRANCHES[b] + " 年，生肖 " +
			// EARTHLY_BRANCHES[c];
		}
		return HEAVENLY_STEMS[a] + "" + EARTHLY_BRANCHES[b] + "年，生肖 " + CHINESE_ZODIAC[c];
	}

	public static void main(String[] args) {

		String name = Chronology.seek(1985);
		System.out.println(name); // 输出 乙丑
		System.out.println("<------------------------------------------------------------------------------->");

		Scanner date = new Scanner(System.in);
		System.out.println("输入年！！");
		int year = date.nextInt();
		String name1 = Chronology.seek(year);
		System.out.println(name1);

		System.out.println("<-------------------------------------------------------------------------------->");
		Chronology.show();
	}

}
